#!/bin/bash

# ===============================================
# RocketMQ 5.0 自动创建 Topic 脚本
# 支持缓存 topicList，复用 mqadmin 容器，自动清理资源
# ===============================================

set -e

TOPIC_LIST=(
  ORDER_VIEW_TASK_TOPIC
  ORDER_VIEW_RESPONSE_TOPIC
  PRODUCT_ORDER_VIEW_RESPONSE_TOPIC
  PROMOTION_ORDER_VIEW_RESPONSE_TOPIC
  STOCK_ORDER_VIEW_RESPONSE_TOPIC
)

NAMESRV_ADDR="rmqnamesrv:9876"
CLUSTER_NAME="DefaultCluster"
ADMIN_CONTAINER="mqadmin-temp"
IMAGE="apache/rocketmq:5.0.0"

echo "[INFO] 🚀 准备启动临时管理容器：$ADMIN_CONTAINER"

# 如果容器已存在，强制删除
if docker ps -a --format '{{.Names}}' | grep -q "^$ADMIN_CONTAINER$"; then
  echo "[WARN] 临时容器已存在，正在删除..."
  docker rm -f $ADMIN_CONTAINER > /dev/null
fi

# 启动容器（后台运行）
docker run -dit \
  --platform=linux/amd64 \
  --network=rocketmq \
  --name $ADMIN_CONTAINER \
  -e "JAVA_OPT=-Duser.home=/home/rocketmq -Drocketmq.client.logRoot=/home/rocketmq/logs -Drocketmq.client.logLevel=ERROR" \
  $IMAGE \
  bash

# 创建日志目录（否则会报错）
docker exec $ADMIN_CONTAINER mkdir -p /home/rocketmq/logs/rocketmqlogs

# 执行 mqadmin 命令函数
mqadmin_exec() {
  local CMD=$1
  docker exec $ADMIN_CONTAINER sh -c "cd /home/rocketmq/rocketmq-5.0.0/bin && ./mqadmin $CMD"
}

echo "[INFO] 📥 预加载当前 Topic 列表..."
ALL_TOPICS=$(mqadmin_exec "topicList -n $NAMESRV_ADDR")

echo "[INFO] 🔄 开始检查并创建 Topic..."
for TOPIC in "${TOPIC_LIST[@]}"; do
  echo "🔍 检查 Topic 是否存在：$TOPIC"

  if ! echo "$ALL_TOPICS" | grep -wq "$TOPIC"; then
    echo "➕ Topic [$TOPIC] 不存在，准备创建..."

    mqadmin_exec "updateTopic \
      -n $NAMESRV_ADDR \
      -c $CLUSTER_NAME \
      -t $TOPIC \
      --readQueueNums 4 \
      --writeQueueNums 4 \
      --perm 6"

    echo "✅ Topic [$TOPIC] 创建成功。"
  else
    echo "✅ Topic [$TOPIC] 已存在，跳过。"
  fi
done

echo "[INFO] 🧹 清理临时容器：$ADMIN_CONTAINER"
docker rm -f $ADMIN_CONTAINER > /dev/null

echo "[INFO] ✅ Topic 创建流程完成。"
